package com.wjm.api.BufferedStream;

import java.io.*;
import java.util.HashMap;

/**
 * Data:2022年07月10日
 * Author:wjm
 * Content: 字符流缓冲流
 *
 *
 *  缓冲流都是高级流，所以操作的就是基础流，不能直接操作硬件设备或节点数据
 *
 *  字符缓冲流分两种
 *              1）BufferedReader（字符输入缓冲流）
 *              2）BufferedWriter（字符输出缓冲流）
 *
 *  字符缓冲流的用法和基本字符流的调用方法一致，但是它具有两个独特的方法：
 *              1）BufferedReader： public String readLine()  读一行文字
 *              2）BufferedWriter： public void newLine()  换行，相当于\r\n，
 *
 *  案例：将乱序的BufferedStream.txt，里的内容进行排序写入到新的txt文件里
 *
 */
public class BufferedStreamDemo1 {
    public static void main(String[] args) throws IOException {
        //创建字符输入流的缓冲流对象
        BufferedReader reader = new BufferedReader(new FileReader("BufferedStream.txt"));
        //创建字符输出流的缓冲流对象
        BufferedWriter writer = new BufferedWriter(new FileWriter("BufferedStream1.txt"));
        //创建Map集合
        HashMap<String,String> map = new HashMap<>();

        //声明末尾表标识
        String line = null;
        //如果读到了第一行的最后一个子之后，没有字了readLine返回是应该是null
        while ((line = reader.readLine()) != null){
            System.out.println(line);
            //通过观察文本的特征，发现可以利用“.”号来将序号与内容进行分割
            String[] strs = line.split("\\."); //因为“.“号在正则表达式是有特殊含义的需要转译一下

            //将分离出来的序号，与内容以键值对的形式存入Map集合中，之后在写入的时候就可以根据key来进行排序
            map.put(strs[0],strs[1]);
        }
        //将map集合中的键值按序号输出
        for (int i=1;i<map.size();i++){
            //将i转化为字符串类型
            String key = String.valueOf(i);
            //获取键所对应的值(也就是内容)
            String aa = map.get(key);

            //写入到新的txt文件中
            writer.write(key+"."+aa);
            //换行
            writer.newLine();
        }

        //关闭连接，释放资源
        reader.close();
        writer.close();

    }

}
